/**
 * @file Controlador.java
 * Clase controlador principal de la aplicación
 * 
 * La clase interconecta la clase ConexionBD con las clases Controlador
 * Se implementa siguiendo el patrón de Diseño "Singleton"
 * 
 * @author Carlos Rabelo
 * @version 2.2
 * @created 27-mar-2013 23:22:04
 */
package Controlador;

import GestorEquipos.Categoria;
import Controladores.ControladorEquipo;
import GestorEquipos.Equipo;
import ConexionBD.ConexionBD;
import GestorJugadores.*;
import GestorUsuarios.*;
import java.sql.SQLException;
import java.util.Date;


public class Controlador {

    private static Controlador Instancia = null;
    private static Usuario [] usuarioActivo;


    /**
     * Constructor por defecto. Al ser un singleton el contructor es privado
     * @param void
     * @return void
     * @author Carlos Rabelo
     */
    private Controlador(){}

    /**
     * Método que devuelve la única instancia de la clase
     * @param void
     * @return Instancia
     * @author Carlos Rabelo
     */
    public static Controlador getInstancia() {
        if (Instancia==null){
            Instancia = new Controlador();
        }
        return Instancia;
    }
    

    
    @Override
    /**
     * Sobrecarga del método clone para impedir que se duplique la instancia
     * (Exigencias del patrón Singleton)
     * @param void
     * @return Object
     * @author Carlos Rabelo
     */
    public Object clone() throws CloneNotSupportedException {
        throw new CloneNotSupportedException(); 
    }
    
   
   
    
    
    /**
     * 
     * @param equipo
     */
  /*  
    public Equipo aniadirEquipo(String[] s){
        String nombre_equipo = s[0];       // Obtenemos el nombre del equipo
        
        String cat = s[1];                     // Obtenemos la categoria del equipo
        /*if (s[1].equals("Benjamin")){
            cat = Categoria.Benjamin;
        } else if(s[1].equals("Alevin")){
            cat = Categoria.Alevin;
        } else if(s[1].equals("Infantil")){
            cat = Categoria.Infantil;
        } else if(s[1].equals("Cadete")){
            cat = Categoria.Cadete;
        } else if(s[1].equals("Junior")){
            cat = Categoria.Junior;
        }*/
   /*    
        Character gen;                      // Obtenemos el genero del Equipo
        if (s[2].equals("M")){
            gen = 'M';
        } else {
            gen = 'F';
        } 
            
        return (ControladorEquipo.getInstanciaControladorEquipo().addEquipo(nombre_equipo, cat, gen));
    }

    
    
    /**
     * Método que crea un objeto Jugador y lo añade a la Base de Datos
     * El objeto Jugador es añadido, y se le asigna un idJugador disponible
     * Si se pretende modificar un Jugador existente en la Base de Datos
     * utilizar el método modificarJugador
     * @param jugador Vector de String con los datos del jugador
     * @return Un objeto jugador con los valores indicados en el parámetro
     * @author Carlos Rabelo
     */
    public Jugador aniadirJugador(String[] jugador){
        Boolean estado=true;
        if (jugador.length==11){
            
        
            if (jugador[10].equals("false")){
                estado=false;
            }
            // return ControladorJugador.getInstancia().addJugador(jugador[0], 
                    // jugador[1], jugador[2].charAt(0), new Date(jugador[3]),
                    //jugador[4], jugador[5], jugador[6], jugador[7],
                    //Integer.parseInt(jugador[8]), estado); 
            return null;
        } else
        {
            return null;
        }
    }

    /**
     * 
     * @param usuario
     */
    public Usuario aniadirUsuario(String nomUsuario, String apellidosUsuario, String dniUsuario, String correoUsuario, Boolean gestor, String login, String contrasena){
        return null;
            
    }

    /**
     * 
     * @param idEquipo
     */
    //public Boolean borrarEquipo(Integer idEquipo){
  //      return ControladorEquipo.getInstanciaControladorEquipo().deleteEquipo(idEquipo);
//    }

    /**
     * Método que elimina un objeto Jugador de la Base de Datos
     * El Jugador en realidad no es eliminado sino que se le cambia
     * el atributo estado a 'baja' pero se mantiene en la Base de Datos
     * @param idJugador el identificador único del Jugador en la BD
     * @return true si se modificó con éxito false si no
     * @author Carlos Rabelo
     */
   public Boolean borrarJugador(Integer idJugador){
       // return ControladorJugador.getInstancia().deleteJugador(idJugador);
       return null;
    }

      
    /**
     * 
     * @param idUsuario
     */
   // public Boolean borrarUsuario(Integer idUsuario){
 //           return ControladorUsuario.getInstancia().deleteUsuario(idUsuario);
   // }

    /**
     * No esta terminado
     * @param equipo
     */
    public Equipo consultarEquipo(String[] s){
        String nombre = s[0];
        String cat = s[1];
        Equipo eq = null;

        /*if (s[1].equals("Benjamin")){
            cat = Categoria.Benjamin;
        } else if(s[1].equals("Alevin")){
            cat = Categoria.Alevin;
        } else if(s[1].equals("Infantil")){
            cat = Categoria.Infantil;
        } else if(s[1].equals("Cadete")){
            cat = Categoria.Cadete;
        } else if(s[1].equals("Junior")){
            cat = Categoria.Junior;
        }*/       

  //      eq = ControladorEquipo.getInstanciaControladorEquipo().getEquipo(nombre, cat);
        return eq;
    }

    /**
     * Método que hace una consulta en la Base de Datos buscando un listado
     * de Jugadores, devuelve un vector de Jugadores con todos los
     * Jugadores devueltos por la consulta.
     * @param jugador Vector de String con los datos del jugador
     * @return El primer objeto jugador devuelto por la consulta
     * @author Carlos Rabelo
     */
    public Jugador consultarJugador(String[] jugador) throws SQLException {
        Jugador[] jugadores;
        Boolean estado=true;
        if (jugador.length==11){
            if (jugador[10].equals("false")){
                estado=false;
            }
            // jugadores=ControladorJugador.getInstancia().getJugador(jugador[0],
                   // jugador[1], jugador[2].charAt(0),new Date(jugador[3]),
                   // jugador[4], jugador[5], jugador[6], jugador[7],
                   // Integer.parseInt(jugador[8]), estado);
          //  return jugadores[0]; //Se tiene una lista de jugadores y el método solo puede devolver uno, se envía el primero
            return null;
        } else
        {
            return null;
        }
    }
    
    public Usuario consultarUsuario(String nomUsuario, String apellidosUsuario, String dniUsuario, String correoUsuario, Boolean es_gestor, String login, String contrasena) throws SQLException {
      //  Usuario[] user = ControladorUsuario.getInstancia().getUsuario(nomUsuario, apellidosUsuario, dniUsuario, correoUsuario, es_gestor, login, contrasena);
       // return user[0];
        return null;
    }
    

    public static Usuario getUsuarioActivo(){
            return usuarioActivo[0];
    }



    /**
     * No esta terminado
     * @param equipo
     */
    public Boolean modificarEquipo(Equipo eq, String[] s){
        String nombre_equipo = null;
        if (s[0] != null)
            nombre_equipo = s[0];           // Obtenemos el nombre del equipo
        
        Categoria cat = null;               // Obtenemos la categoria del equipo
        if (s[1] != null) {
            if (s[1].equals("Benjamin")){
                cat = Categoria.Benjamin;
            } else if(s[1].equals("Alevin")){
                cat = Categoria.Alevin;
            } else if(s[1].equals("Infantil")){
                cat = Categoria.Infantil;
            } else if(s[1].equals("Cadete")){
                cat = Categoria.Cadete;
            } else if(s[1].equals("Junior")){
                cat = Categoria.Junior;
            }
        }
        Character gen = null;                      // Obtenemos el genero del Equipo
        if (s[2] != null) {
            if (s[2].equals("M")){
                gen = 'M';
            } else {
                gen = 'F';
            }
        }
        //return ControladorEquipo.getInstanciaControladorEquipo().updateEquipo(eq,nombre_equipo, cat, gen, null);
        return null;
    } 

    /**
     * Método que modifica un objeto Jugador existente en la Base de Datos y
     * que es identificado por el parámetro id_jug.
     * El Jugador es actualizado con los valores del resto de parámetros
     * @param jugador Vector de String con los datos del jugador
     * @return true si se modificó con éxito false si no
     * @author Carlos Rabelo
     */
    public Boolean modificarJugador(String[] jugador) {
    Boolean estado=true;
        if (jugador.length==11){
            Jugador jug=new Jugador();
            jug.setIdJugador(Integer.parseInt(jugador[0]));
            if (jugador[10].equals("false")){
                estado=false;
            }
          //  return ControladorJugador.getInstancia().setJugador(jug, jugador[1],
                    // jugador[2], jugador[3].charAt(0), new Date(jugador[4]),
                    // jugador[5], jugador[6], jugador[7], jugador[8],
                     // Integer.parseInt(jugador[9]), estado);
            return null;
        } else
        {
            return null;
        }
    }
    
    /**
     * 
     * @param usuario
     */
    public Boolean modificarUsuario( Usuario user){
            Boolean salida  = true;
            
            String consulta = "UPDATE Usuario SET Nombre='" + user.getNombre() +
                  "', Apellidos='"  + user.getApellidos() +
                  "', DNI='" + user.getDNI() +
                  ", Login='" + user.getLogin() +
                  ", Contraseña='"  + user.getContrasena() +
                  ", Correo='"  + user.getCorreo() +
                  ", tipoUsuario='";
            
            if(user.getEsGestor()){
                consulta+= "G";
            }
            else {
                consulta+= "E";
            }
            consulta += "'WHERE IdUsuario=" + user.getIdUsuario().toString() + ";";
            
             try {
            ConexionBD.getInstancia().conectar();
            ConexionBD.getInstancia().actualizar(consulta);
            ConexionBD.getInstancia().desconectar();
        } catch (SQLException ex) {
            System.out.println(ex);
            salida=false;
        }
         
             return salida;
            
    }

    
}
